Muito bom, reputado!
- Fórum
- OTServ
- Recursos
- Scripting
- Globalevents e Spells
- Monstros duelando entre si
info
Grupo: Visconde
Registrado: 20/06/15
Posts: 331
Reputação: +205
Gênero: Masculino

info
Grupo: Conde
Registrado: 14/02/13
Posts: 702
Reputação: +196
Gênero: Masculino

O sistema parece estar bom, porem o jeito que você escreve seus códigos é ruim. uma dica, quando for criar um código ao invés de fazer:
> if (true) then
>> if (true) then
>>> if (true) then
>>>> if (true) then
>>>>> Código
>>>> end
>>> end
>> end
> end
Crie seus código assim:
> if (false) then
> return
> end
> if (false) then
> return
> end
> if (false) then
> return
> end
> if (false) then
> return
> end
> Código
Assim facilita muito a leitura, e intendimento e manutenção do código.
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

O sistema parece estar bom, porem o jeito que você escreve seus códigos é ruim. uma dica, quando for criar um código ao invés de fazer:
> if (true) then >> if (true) then >>> if (true) then >>>> if (true) then >>>>> Código >>>> end >>> end >> end > endCrie seus código assim:
> if (false) then > return > end > if (false) then > return > end > if (false) then > return > end > if (false) then > return > end > CódigoAssim facilita muito a leitura, e intendimento e manutenção do código.
Bom, eu entendo o seu posicionamento. Mas ai eu acho que é mais uma questão de gosto. Eu gosto de ler os códigos linearmente, por isso escrevo da forma que escrevo, do meu ponto de vista fica mais fácil pra mim verificar tudo que é feito escrevendo em cascata.
Mas, vou aceitar a sugestão pois, em termos didáticos, é mais fácil ensinar/mostrar um código para alguém com a sua forma de escrita.
Valeu.
Obrigado cara!
Abraços,
editei o que achei pertinente com relação a sugestão do banana.
Editado Janeiro 19 por Skulls
info
Grupo: Administrador
Registrado: 08/07/05
Posts: 5.8k
Reputação: +1.4k
Gênero: Outro

Ótima contribuição, como sempre!
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Ótima contribuição, como sempre!
Obrigado!
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

ficou realmente bom, acredito que o onThink se tornaria pesado pra esse caso mas não tiro o mérito da forma que vc utilizou. A função verify é facilmente editável e isso é um ponto ultra positivo pois permite fácil implementação com tabelas pra setar raças atacáveis e evitar minions atacando bosses (nome diferente)
Só fica aqui uma questão pessoal: pq não permitir que a setTarget varie de monstro pra monstro? Orcs odeiam trolls mas eles odeiam muito mais os humanos, por exemplo.
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

ficou realmente bom, acredito que o onThink se tornaria pesado pra esse caso mas não tiro o mérito da forma que vc utilizou. A função verify é facilmente editável e isso é um ponto ultra positivo pois permite fácil implementação com tabelas pra setar raças atacáveis e evitar minions atacando bosses (nome diferente)
Só fica aqui uma questão pessoal: pq não permitir que a setTarget varie de monstro pra monstro? Orcs odeiam trolls mas eles odeiam muito mais os humanos, por exemplo.
Set target varie de que forma de monstro para monstro?
De qualquer forma minha settarget ficou meio durona mesmo, mas é pq pro que eu preciso só é necessário que ele dê preferencia a criaturas do que a players.
Obrigado pelo comentário. Você acha que ficaria pesado? Eu tava achando, mas agora to na duvida. Eu fiz um test clean (com server vazio) com pra la de mil monstros e rodou liso em um pc normal, não dedicado e não servidor.
Editado Janeiro 19 por Skulls
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

Pra você ter noção eu fiz uma spell que mandava o player andar pra frente durante 20 segundos, essa daqui e ela funcionou liso, mas quando passei prum sv ela travava ![]()
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

É algo de complexidade n^2 no pior caso, n no melhor caso e nlogn de caso médio, considerando que tem varias coisas rodando em paralelo não é o ideal rs.
ola, tentei usar esse código mas na hora de rodar esta dando este erro:
o que pode ser?
Distro: TFS 0.4
e mesmo se eu ignoro esses erros e tento criar o monstro que eu coloquei as tags de evento me aparece o erro abaixo:

Editado Março 13 por fefuxd
info
Grupo: Campones
Registrado: 11/03/17
Posts: 2
Reputação: 0
Gênero: Masculino

ola, tudo bom,, gostaria de saber melhor os passos para fazer isso. podeira me ajudar??
info
Grupo: Campones
Registrado: 31/05/17
Posts: 1
Reputação: 0
não funcionou distro 0.36
Editado Julho 25 por Heartless1993







info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino
Boa noite galera
Como levantei no tópico: http://www.xtibia.com/forum/topic/238784-monstros-se-matando/monstros selvagens são todos tratados como amigos e, portanto, não é possível setar target neles com funções de target normal. Além disso, o callBack onTarget() não funciona para monstros.
Desde então estou em busca de uma forma de fazer monstros lutarem entre si sem mexer na source e, com algumas sugestões do Lobo @Night Wolf eu consegui chegar a algo bem satisfatório para o que eu precisava. Portanto, compartilho com você a base do sistema (fiz outras coisas para o meu objetivo que acho bobeira postar aqui, mas a base do sistema de luta está aqui).
Então vamos lá.
Primeiramente, esse sistema é baseado em dois eventos: onThink (que repete de x em x segundos) e onAttack(para evitar que o monstro ataque players quando estiver atacando monstros.
Vá em creaturescripts e crie as seguintes tags em creaturescripts.xml:
Feito isso, vá na pasta lib (data/lib) e crie um arquivo chamado monsterslib.lua. La dentro coloque:
local config = { storages = {time = 5553, tgt = 5554}, away_dist = 2, } --[[Aqui você define as particularidades do alvo do monstro Por exemplo: Se o alvo for ele mesmo, ele não ataca Se o alvo for da mesma especie, isto é, tiver o mesmo nome ele não ataca e por ai vai]]--Feito isso, agora crie um arquivo chamado monsters.lua dentro de creaturescripts/scripts, e cole isso dentro
local config = { storages = {time = 5553, tgt = 5554}, attRange = 1, }function onAttack(cid, target) if isPlayer(target) then if getCreatureStorage(cid, config.storages.tgt) ~= target then return false end end return true end
Pronto é isso, você tem um pequeno framework configurável para fazer seus monstros se matarem.
Para implementar o script no monstro basta ir no arquivo .xml dos monstros que deseja incluir esse sistema e colocar, logo após as defense, a tag:
<script> <event name="minionatt"/> <event name="minion"/> </script>Abaixo um exemplo de utilização do framework, simulando uma luta de "raças" entre dwarfs e orcs de diferentes tipos:
O código está bem auto explicativo. Qualquer dúvida me avisem.
Espero que gostem.
Abraços,
Editado Janeiro 19 por Skulls